not_prime = [0] * 4010  # 标记数组（0=素数，1=非素数）
prime = []
# 预处理4000以内的素数
for i in range(2, 4001):
    if not_prime[i] == 0:
        prime.append(i)
        # 标记倍数的方式，比直接试除法效率更高
        for j in range(2 * i, 4001, i):
            not_prime[j] = 1

# 判断平方数
def square_number(x):
    y = int(x ** 0.5)
    return y * y == x or (y + 1) * (y + 1) == x  # 验证y和y+1，是应对浮点数精度误差设计的保护性验证
# 判断立方数
def cubic_number(x):
    y = int(x ** (1 / 3))
    return y ** 3 == x or (y + 1) ** 3 == x

def check(a):
    global flag, flag1
    # 枚举4000以内素因子
    for i in prime:
        if a % i == 0:  # 发现质因子
            mi = 0
            while a % i == 0:  # 计算该质因子的幂次
                a //= i
                mi += 1
            # 幂次必须大于1
            if mi == 1:
                flag = False
                break
    # 剩余数（超出预处理范围）的数还需满足是平方数/立方数结果才正确，可避免完全分解大数，提高效率
    if square_number(a) or cubic_number(a):
        flag1 = True

t = int(input())
for _ in range(t):
    a = int(input())
    flag = True
    flag1 = False
    check(a)
    if flag and flag1:
        print('yes')
    else:
        print('no')
